<?php
/** .-------------------------------------------------------------------
 * |  Software: [HDPHP framework]
 * |      Site: www.hdphp.com  www.hdcms.com
 * |-------------------------------------------------------------------
 * |    Author: 向军 <2300071698@qq.com>
 * |    WeChat: aihoudun
 * | Copyright (c) 2012-2019, www.houdunwang.com. All Rights Reserved.
 * '-------------------------------------------------------------------*/

namespace app\home\controller;

use houdunwang\request\Request;
use houdunwang\view\View;
use system\model\Article;
use system\model\Category;
use system\model\Module;

/**
 *  实例化addons或module类
 * Class Entry
 * @package app\home\controller
 */
class Entry
{

    protected $template;
    public function __construct ()
    {
        $this->template = 'template/' . ( IS_MOBILE ? 'mobile' : 'web' ) . '/' . v('config.template');
        //定义模板路径常量
        define(__TEMPLATE__,__ROOT__.'/' . $this->template);
        //栏目标签
        //1.运行模块
        $res = $this->runModule();



    }
    //网站首页
    public function index()
    {
        //获取数据库全部数据
        //$ress = Article::get()->toArray();
        //return View('', compact('ress'));
        //--------------------------------------------
        //前台模板
//        $data = Category::get()->toArray();
//        View::with('data',$data);
//        return view($this->template . '/index.html');
        $headConf = [
            'title'=>'首页',
            'css'=>['index'],
        ];
        return view($this->template . '/index.html',compact('headConf'));
    }
    /**
     * 栏目页面
     */
    public function category()
    {
        $headConf = [
            'title'=>'列表页',
            'css'=>['list_article'],
        ];
        //获得栏目cate_id
        $cate_id = Request::get('cate_id');
        //找到与cate_id相对应的数据
        $cms_field = Category::find($cate_id);
        //所有栏目
        $tags = Category::get()->toArray();
//        p($tags);die;
        //分配数据
        return view($this->template . '/list.html',compact('headConf','cms_field','tags'));

    }
    /**
     *  文章内容页
     */
    public function content()
    {
        $arc_id = Request::get( 'arc_id' );
        //找对应数据
        $cms_field = Article::find( $arc_id );
        $headConf = [
            'title'=>$cms_field['arc_title'],
            'css'=>['page'],
        ];
        //点击次数自增1
        Db::table("article")->where('arc_id',$arc_id)->increment('arc_click',1);
        return view( $this->template . '/content.html' , compact( 'headConf','cms_field' ) );
    }



    /**
     *  运行模块
     *  结果总结：通过$m参数，$action两个参数可以分别访问addons或module中类方法
     *  网址作为参考 ：  ↓
     *   http://weian-weijue.com/weixincms/index.php?m=pic&action=controller/index/add
     */
    public function runModule()
    {
        /**
         *      1.1参考地址
         *   http://weian-weijue.com/weixincms/index.php?m=pic&action=controller/index/index
         *   最终执行：(new \addons\pic\controller\Index())->add();
         */
        $m = Request::get('m');
        //p($m); //？ m = pic .
        //1.8,为了考虑，如果你数据库没有这个模块，那么addons/不会有这个模块，没必要实例化了
        $module = Module::where('module_name', $m)->first();
//        p($module);
        //1.2
        $action = Request::get('action');
//        p($action);  &action=controller/index/index  =  结果 ：controller/index/index
        /**    以上两个get参数同时存在我们会认为你在访问模块     **/
        //1.3 $module,是在后来增加的
        if ($module && $m && $action) {
            /**
             * 1.4 走到这里证明是在访问模块操作 : .. 把action转为数组
             *   $action ↓结果
             *   Array
             * (
             * [0] => controller
             * [1] => index
             * [2] => index
             * )
             */
            $info = explode('/', $action);
            //1.5
            //$class = "\addons\\" . $m . '\\' . $info[0] . '\\' . ucfirst($info[1]);  // 结果为：\addons\pic\controller\Index
            //1.9对1.5进行修改，系统模块需要去module里面实例化
            $class = ($module['module_is_system'] == 1 ? 'module' : 'addons') . "\\" . $m . '\\' . $info[0] . '\\' . ucfirst($info[1]);
            //1.6
            die(call_user_func_array([new $class, $info[2]], []));
        }
        //1.7
    }

}